/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controldepuntos.clases;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.swing.JOptionPane;
import org.eclipse.persistence.exceptions.i18n.JMSProcessingExceptionResource;

/**
 *
 * @author Víctor
 */
@Entity
@Table(name = "tr_usuario")
@NamedQueries({
    @NamedQuery(name = "TrUsuario.findAll", query = "SELECT t FROM TrUsuario t")})
public class TrUsuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "id_usuario")
    private Integer idUsuario;
    @Column(name = "contrasenia")
    private String contrasenia;
    @Column(name = "codigo")
    private String codigo;
    @OneToMany(mappedBy = "idUsuario")
    private Collection<TrAlumno> trAlumnoCollection;
    @JoinColumn(name = "id_perfil", referencedColumnName = "id_perfil")
    @ManyToOne(optional = false)
    private Integer idPerfil;
    private String usuario;

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public TrUsuario() {
    }

    public TrUsuario(Integer idUsuario) {
        this.idUsuario = idUsuario;
    }

    public Integer getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(Integer idUsuario) {
        this.idUsuario = idUsuario;
    }

    public String getContrasenia() {
        return contrasenia;
    }

    public void setContrasenia(String contrasenia) {
        this.contrasenia = contrasenia;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public Collection<TrAlumno> getTrAlumnoCollection() {
        return trAlumnoCollection;
    }

    public void setTrAlumnoCollection(Collection<TrAlumno> trAlumnoCollection) {
        this.trAlumnoCollection = trAlumnoCollection;
    }

    public Integer getIdPerfil() {
        return idPerfil;
    }

    public void setIdPerfil(Integer idPerfil) {
        this.idPerfil = idPerfil;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUsuario != null ? idUsuario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof TrUsuario)) {
            return false;
        }
        TrUsuario other = (TrUsuario) object;
        if ((this.idUsuario == null && other.idUsuario != null) || (this.idUsuario != null && !this.idUsuario.equals(other.idUsuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "controldepuntos.clases.TrUsuario[ idUsuario=" + idUsuario + " ]";
    }
    
    public void ingresar(TrAlumno alumno, TrUsuario usuario){
        try{
            Connection con;
            ResultSet rs;
            Statement stm;
            boolean mandarMensaje=true;
            /*String SQL="SELECT a.id_alumno, a.numero_de_control, a.nombre, a.ap_paterno, a.ap_materno, u.contrasenia, u.id_perfil, u.codigo "
                    +  "FROM tr_usuario u, tr_alumno a WHERE a.numero_de_control='"+alumno.getNumeroDeControl()+"' AND a.id_usuario = u.id_usuario";*/
            String SQL="SELECT u.usuario, u.contrasenia, u.id_perfil, u.codigo "
                    +  "FROM tr_usuario u WHERE u.usuario='"+usuario.getUsuario()+"' AND activo=1";
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase d = new DataBase();
            con = d.conectar();
            stm=con.createStatement();
            rs=stm.executeQuery(SQL);
            while(rs.next()){
                String contrasenia = rs.getString("contrasenia");
                String codigo = rs.getString("codigo");
                //Verificar si el campo código está poblado. Si está, se redirige a que cambie la contraseña. Si no,
                //Se valida como un usuario normal que ya tiene contraseña
                //JOptionPane.showMessageDialog(AdministradorVentanas.pantallaInicio, "Antes del if: "+codigo);
                if(codigo==null || codigo.isEmpty()){
                    //JOptionPane.showMessageDialog(AdministradorVentanas.pantallaInicio, "Entro al if");
                    if(contrasenia.equals(usuario.getContrasenia())){
                        mandarMensaje=false;
                        Integer tipoUsuario = rs.getInt("id_perfil");
                        if(tipoUsuario==1){
                            Utilidades.numeroDeControl=Integer.parseInt(usuario.getUsuario());
                            AdministradorVentanas.pantallaHistorialAlumno=null;
                            AdministradorVentanas.mostrarPantallaHistorialAlumno();
                            AdministradorVentanas.ocultarPantallaInicio();
                        }else{
                            AdministradorVentanas.mostrarPantallaMenu();
                            AdministradorVentanas.ocultarPantallaInicio();
                        }
                    }else{
                        mandarMensaje=true;
                    }
                }else{
                    //En este momento se sabe que el usuario necesita modificar la contraseña. Por eso se valida el 
                    //código
                    if(usuario.getContrasenia().equals(codigo)){
                        mandarMensaje=false;
                        //Hasta este punto, los códigos son idénticos. Se redirige al usuario a la pantalla para
                        //que modifique la contraseña
                        Utilidades.numeroDeControl=Integer.parseInt(usuario.getUsuario());
                        AdministradorVentanas.mostrarPantallaNuevaContrasenia();
                        AdministradorVentanas.ocultarPantallaInicio();
                    }else{
                        mandarMensaje=false;
                        JOptionPane.showMessageDialog(AdministradorVentanas.pantallaInicio,"Ocurrió un error al ingresar. Verifique de nuevo el código que introdujo","Error",JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
            if(mandarMensaje){
                JOptionPane.showMessageDialog(AdministradorVentanas.pantallaInicio, "Usuario o contraseña incorrectos","Error",JOptionPane.ERROR_MESSAGE);
            }
            //JOptionPane.showMessageDialog(null, "Usuario o contraseña incorrectos");
            
        }catch(Exception ex){
            JOptionPane.showMessageDialog(AdministradorVentanas.pantallaInicio, ex.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    public void insertarUsuario(TrAlumno alumno, TrUsuario usuario){
        try{
            Connection con;
            Statement stm;
            String codigo = Utilidades.generarCodigo();
            String SQL="INSERT INTO tr_usuario (usuario, contrasenia, id_perfil, codigo, activo) values ('"+alumno.getNumeroDeControl()+"','"+usuario.getContrasenia()+"',1,'"+codigo+"',1)";
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase d = new DataBase();
            con = d.conectar();
            stm=con.createStatement();
            int correcto = stm.executeUpdate(SQL);
            if(correcto>0){
                //JOptionPane.showMessageDialog(null, "Alumno agregado correctamente");
                //ARCatalogoFalta pantalla = new ARCatalogoFalta();
                //pantalla.cargaCatalogoReglamento();
                //AdministradorVentanas.ocultarPantallaNuevoAlumno();
                //AdministradorVentanas.mostrarPantallaAlumnos();
            }
            
        }catch(Exception ex){
            JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, ex.getMessage());
        }
    }
    
    public void modificarContraseniaUsuario(TrUsuario usuario){
        try{
            Connection con;
            Statement stm;
            String SQL="UPDATE tr_usuario set contrasenia='"+usuario.getContrasenia()+"', codigo='' WHERE id_usuario="+usuario.getIdUsuario();
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase d = new DataBase();
            con = d.conectar();
            stm=con.createStatement();
            int correcto = stm.executeUpdate(SQL);
            if(correcto>0){
                JOptionPane.showMessageDialog(AdministradorVentanas.pantallaNuevaContrasenia, "Contraseña modificada correctamente","Éxito",JOptionPane.INFORMATION_MESSAGE);
                if(usuario.getIdPerfil().equals(1)){
                    AdministradorVentanas.mostrarPantallaHistorialAlumno();
                    AdministradorVentanas.ocultarPantallaNuevaContrasenia();
                }else{
                    AdministradorVentanas.mostrarPantallaMenu();
                    AdministradorVentanas.ocultarPantallaNuevaContrasenia();
                }
                
            }
            
        }catch(Exception ex){
            JOptionPane.showMessageDialog(AdministradorVentanas.pantallaNuevaContrasenia, ex.getMessage());
        }
    }
    
    public TrUsuario seleccionarPorCodigo(String codigo){
         try{
            TrUsuario usuarioEncontrado=null;
            Statement stm;
            Connection con;
            String SQL="SELECT id_usuario, id_perfil, codigo FROM tr_usuario WHERE codigo='"+codigo+"'";
            ResultSet rs;
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase db = new DataBase();
            con=db.conectar();
            stm=con.createStatement();
            rs = stm.executeQuery(SQL);
            while(rs.next()){
                usuarioEncontrado=new TrUsuario();
                usuarioEncontrado.idUsuario=Integer.parseInt(rs.getString("id_usuario"));
                usuarioEncontrado.idPerfil=Integer.parseInt(rs.getString("id_perfil"));
                usuarioEncontrado.codigo=rs.getString("codigo");
            }
            return usuarioEncontrado;
            
         }catch(Exception ex){
             JOptionPane.showMessageDialog(AdministradorVentanas.pantallaNuevaContrasenia, "Lo sentimos, Ocurrió un error. TrUsuario.seleccionarPorCodigo"+ex.getMessage()+ex.getStackTrace());
             return null;
         }
     }
    
     public static int buscarCodigo(String codigo){
         try{
            int encontrado = 0;
            Statement stm;
            Connection con;
            String SQL="SELECT id_usuario FROM tr_usuario WHERE codigo='"+codigo+"'";
            ResultSet rs;
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase db = new DataBase();
            con=db.conectar();
            stm=con.createStatement();
            rs = stm.executeQuery(SQL);
            while(rs.next()){
                encontrado = 1;
            }
            rs.close();
            con.close();
            return encontrado;
         }catch(Exception ex){
             JOptionPane.showMessageDialog(AdministradorVentanas.pantallaNuevaContrasenia, "Lo sentimos, Ocurrió un error. TrUsuario.seleccionarPorCodigo"+ex.getMessage()+ex.getStackTrace());
             return 1;
             
         }
     }
     
     public void eliminarUsuario(TrAlumno usuarioAEliminar){
         try{
            Statement stm;
            Connection con;
            String SQL="UPDATE tr_usuario set activo=0 WHERE id_usuario="+usuarioAEliminar.getIdUsuario();
            DataBase db = new DataBase();
            con=db.conectar();
            stm=con.createStatement();
            int correcto = stm.executeUpdate(SQL);
            if(correcto>0){
                /*JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, "Alumno dado de baja satisfactoriamente","Éxito",JOptionPane.INFORMATION_MESSAGE);
                AdministradorVentanas.ocultarPantallaAlumnos();
                AdministradorVentanas.pantallaAlumnos=null;
                AdministradorVentanas.mostrarPantallaAlumnos();*/
            }
         }catch(Exception ex){
             JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, "Lo sentimos, Ocurrió un error. TrUsuario.eliminarUsuario()"+ex.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
         }
    }
    
}
